메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

Enterprise Flex RIA 해부(7) : UI 프로젝트 Maven 빌드

한빛미디어

|

2008-08-19

|

by HANBIT

12,671

제공 : 한빛 네트워크
저자 : Tony Hillerson
역자 : 추홍엽
원문 : Anatomy of an Enterprise Flex RIA Part 7: The ui Project Maven Build

지난 기사에서는 Maven과 Ant를 통합하는 것과 데이터베이스를 자동으로 생성시켜 주는 몇몇 데이터 툴들에 관해 살펴봤다. 이번에는 Maven에서 Ant를 통해 Flex를 빌드하는 것과 Eclipse에서 외부 작업을 자동으로 실행하는 것을 포함하여 프로젝트의 UI부분에 관해 살펴보겠다.

web 프로젝트에서 Maven은 빌드의 컴파일 단계동안 모든 Java 클래스들을 컴파일 할 것이다. 마찬가지로 Flex 프로젝트를 빌드하는 것은 엄청난 시간이 걸리기 때문에, 이 작업에 Ant를 사용해보도록 하겠다. 다음은 Ant로 Flex를 컴파일하기 위해 필요한 사항이다.

    
    
    
    
    
    
    
    
    
    
    
    
    
    
         
              
         
    
    
         
              
         
    
먼저, data 프로젝트의 build.xml에서 만들었던 것과 똑같은 사용자 디렉토리 변수가 있다. 그리고나서 Flex 소스 위치나 Maven 빌드 디렉토리 위치, 혹은 LCDS 설정 파일 위치와 같은 중요한 위치 정보를 가리키는 몇몇 프로퍼티를 설정한다. 여기에는 몇몇 Cairngen 설정 파일에 관한 사항도 있는데, 이것은 나중에 살펴보도록 하겠다. 그 뒤에는 FlexUnit Ant 태스크 경로를 정의한다. 이것은 data 라이브러리의 포함 사항과 같이, 버전이 바뀔때마다 다시 설정될 필요가 있는데, 그리 자주 일어나지는 아니다.

마지막으로 Maven의 테스트 단계동안 FlexUnit 테스트들을 호출할 수 있도록 flexunit이라는 태스크를 정의한다.

이제 Flex 어플리케이션이 생성한 .swf 파일들을 Maven이 Java 파일들을 빌드하는 디렉토리에 컴파일한다. 이것은 일관성을 위한 것이기도 하지만, Eclipse/Flex Builder가 .swf파일들을 이 디렉토리에 컴파일하기 때문이기도 하다. copy 태스크는 어떤 어플리케이션이 컴파일을 하던지 .swf 파일들로 작업을 해낼 수 있다. 이런식으로 Eclipse/Flex Builder는 “external builder"를 사용하여 생긴 변경 사항을 쉽게 다시 보기위하여 프로젝트 빌드 후에 copy 태스크를 실행할 수 있다.

먼저 [그림 6]과 같이, Eclipse 탐색기에서 빌드 파일을 우클릭하여 External Tools를 선택한다.


[그림 6] External Tools 선택

그 다음 좌측 상단에 있는 New 버튼을 클릭하고, 의미가 있는 이름으로 변경한다(여기서는 bookie-ui build.xml로 했다). 그리고 [그림 7]과 같이 Targets 탭을 클릭한다.


[그림 7] External Ant 빌드 추가

실행될 타겟을 copy-changes로 변경하고, Apply를 클릭한 후에 Close를 클릭한다. (그림 8 참고)


[그림 8] External Ant 타겟 선택

이제 프로젝트가 빌드되고 Flex 소스가 .swf파일들로 컴파일될 때마다, copy-changes 타겟이 실행되어 .swf파일을 포함한 변경된 웹 파일들은 디플로이 디렉토리로 복사된다.

컴파일에 관해, 다음 Ant에서의 Flex 컴파일 예제를 보자. 여기에서는 Flex 컴파일러에 대한 시스템 호출을 실행하기 위해 Ant를 사용했다. mxml 컴파일러와 함께 작동하는 Adobe의 우수한 Ant 작업(Adobe에서의 Flex Ant Tasks)을 사용할 수도 있었지만, 이것은 Maven이나 소스 컨트롤에 체크인하기 위해 하나 이상의 JAR 파일이 필요하다. 유스케이스가 그리 복잡하지 않기 때문에, 그냥 exec 태그를 단 시스템 호출을 만들어 붙였다.

이 태스크는 Flex 어플리케이션에서 사용자가 처음 마주치는 인덱스 어플리케이션을 컴파일하기 위한 것이다. web 프로젝트의 build.xml을 보면, 관리자 어플리케이션을 컴파일 하기위한 또 다른 태스크나 이 둘을 같이 컴파일하는 compile-flex 태스크를 발견할 수 있을 것이다.

    
         
         
         
         
         
         
         
         ="index.mxml" />
    
    

시스템 호출로 Flex를 컴파일 하려면, 몇 개의 인자를 전달하면 된다. 컨텍스트 루트는 어플리케이션 시작시에 추가되면서 로컬 호출을 할 필요가 있다고 알려준다. 이것은 구성되는 서비스를 알기 위해 LCDS 환경에서 로드될 필요가 있다. 컴파일이 끝나면 .swf파일을 빌드 디렉토리로 복사한다.

    
         
              
         
    
    
         
              
              
              
              
              
              
              
              
              
              
              
              
         
    

copy-changes 태스크는 모든 변경된 .swf 파일들을 로컬 서버로 복사하는데 이러한 변경사항들은 서버를 재시작하지 않고도 바로 확인할 수 있다. 먼저, 업데이트된 .swf 파일들을 찾기 위해 빌드 디렉토리를 검사하고, 해당 파일들을 이동시킨뒤, WAR에 대한 소스 디렉토리에서 컨텍스트를 재시작 하지 않고도 디플로이 가능한 파일들에 대한 변경사항을 검사한다. Ant는 작업 디렉토리에 있는 파일들의 버전이 서버 디렉토리에 있는 것들보다 최신인지를 확인한다.

물론, Ant에 로컬서버 위치를 알려 줄 필요가 있고, 이 위치는 각 개발자의 머신마다 각각 틀릴 수 있다. 프로퍼티 파일에서 mxmlc 경로를 설정했던 것과 마찬가지로 이 위치를 설정하도록 한다.
flex.sdk.bin.dir=/Applications/flex_sdk_2/bin
deploy.dir=/Applications/jboss/server/default/deploy/bookie.ear/bookie.war/
이것은 필자의 머신에 대한 프로퍼티 파일 설정이다. 이 변수들을 프로퍼티 파일로 옮겨서 각 개발자들마다 빌드 파일을 바꾸는 대신 프로퍼티 파일을 설정하도록 했다. 그리고나서 일단 초기 프로젝트를 소스 컨트롤에 체크인하면, 소스 컨트롤 시스템이 이 프로퍼티 파일을 무시하게, 즉 버전을 부여하지 않게 할 수 있다. 이런식으로 한명의 개발자가 자신의 머신에 대한 특정한 설정을 빌드 파일에 실수로 덮어쓰지 않게 할 수 있다. 남은 것은 이 파일에 대한 템플릿이나, 새로운 개발자의 머신에 프로젝트를 설정하는 법에 대한 최소한의 설명을 제공하는 것이다.

이제 Maven이 ui 프로젝트에서 Ant를 호출하는 것을 보자.
...
    
         maven-antrun-plugin
         
              
                   compile
                   swf-compilation-tasks
                   
                        
                             
                             
                                  
                             
                        
                   
                  
                        run
                   
              
              
                   test
                   flexunit-tasks
                   
                        
                             
                             
                                  
                             
                        
                   
                   
                        run
                   
              
         
    

...
이것은 data 프로젝트와 크게 다르지 않다. user.home 변수를 넘겨주고 빌드파일을 지정하고 Maven에게 어느 태스크를 호출할 것인지 알려주면 된다. "컴파일"단계 동안에는 Flex를 컴파일 하는 태스크를 호출하고, "테스트"단계에서는 FlexUnit을 실행하는 태스크를 호출한다.

Maven과 Ant가 데이터베이스 스키마를 업데이트하고, 데이터셋을 로드하고, Flex 컴파일 및 테스트 등을 함으로써 애자일리티에 주는 이점은, 각각의 개발자가 로컬에서 합쳐진 팀원들의 변경사항을 얻고 개발로 돌아가는데 있어 아주 적은 과정만 마치면 된다는 것이다.
  1. 소스 컨트롤에서 변경사항을 체크아웃한다.
  2. Maven 패키지 명령을 실행한다.
  3. 패키지된 결과물을 로컬 서버에 복사하기 위해 커스텀 Ant 태스크를 실행한다.
이렇게 하면 리뷰하려는 개발자를 위해 변경사항이 업데이트된 데이터베이스로 로컬 서버에 프로젝트의 깔끔한 새 버전을 얻을 수 있다. 이것은 QA 빌드에 대해서도 멋지게 작동한다. 물론, 이러한 단계들 중 필요한 부분만 실행할 수도 있다. 또한, Java나 Flex를 컴파일 하는 것과 같은, IDE가 자동으로 수행하는 모든 것들은 Maven이 빌드를 실행하는 것처럼 작동하고, 빌드의 일부를 조정하여 이 부분을 증가시킬 수 있다.

핵심은 우리가 빌드 프로세스의 어떤 부분이라도 자동화 되길 원하며, 인위적인 개입없이도 빌드가 되길 원한다는 것이다. 이런 식으로 빌드를 QA 머신에 자동으로 집어넣을 수 있고, 밤샘 빌드를 실행하고, 누군가 소스 컨트롤에 체크인을 하는 순간에도 빌드를 할 수 있다. FlexUnit으로 Flex를 테스트 하기 위해서는 빌드를 실행하는 머신에 설치된 웹브라우저가 필요할 수도 있다는 것만 기억하자.

다음에는 개발 주기에 대해 자세히 알아보고, Maven에서의 종속성에 관해 알아보도록 하겠다. 여기를 클릭하면 전체 시리즈(영문)를 볼 수 있다.
TAG :
댓글 입력
자료실

최근 본 책0